﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;

namespace Xpus.Website.Core.UrlTools
{
	/// <summary>
	/// 为整个站点提供URL重写功能。
	/// </summary>
	public class XpusUrlRewritingModule :IHttpModule
	{
		#region IHttpModule Members
		/// <summary>
		/// 释放资源。
		/// </summary>
		public void Dispose()
		{
		}

		/// <summary>
		/// 初始化模块，并使其为处理请求做好准备。
		/// </summary>
		/// <param name="context">一个 HttpApplication，它提供对 ASP.NET 应用程序内所有应用程序对象的公用的方法、属性和事件的访问。</param>
		public void Init(HttpApplication context)
		{
			context.AuthorizeRequest += onAuthorizeRequest;
		}
		#endregion

		void onAuthorizeRequest(object sender, EventArgs e)
		{
			HttpApplication app = (HttpApplication)sender;

			string url = app.Context.Request.RawUrl;
			
			// 判断请求中是否有文件扩展名
			int lastDot = url.LastIndexOf(".", StringComparison.InvariantCultureIgnoreCase);
			int lastSlash = url.LastIndexOf("/", StringComparison.InvariantCultureIgnoreCase);
			bool hasExt = lastDot > lastSlash;

			// 如果没有扩展名，则增加xpus页面的默认后缀
			if(!hasExt)
			{
				if(url.EndsWith("/"))
					url = string.Format("{0}{1}", url, UrlHelper.XpusPagePostfix);
				else
					url = string.Format("{0}/{1}", url, UrlHelper.XpusPagePostfix);

				app.Context.RewritePath(url);
			}
		}
	}
}
